Flash memories are used everywhere to store files, media, and programs due to their portability. Solid state disks (designed with flash memories) are replacing traditional hard disk drives due to their superior data read time and transfer rates. Programming a memory cell (hereinafter referred to as a “cell”) is done by electron injection (i.e., hot electron injection creates an electric field) to increase the voltage incrementally above a charge threshold. Conversely, erasing is done by removing electrons to decrease the charge level to zero. The main disadvantage is the limited number of erases (10,000 to 100,000) during the flash lifecycle. The write and subsequent re-write processes require a suitable block of cells (106) that allows electron injection to increase the desired cells from a lower voltage level to a higher voltage level. If there are not enough suitable cells then an erasure (cell voltages are dropped to the lowest level) is needed. Within a block, any single cell's voltage level can be increased as needed (i.e., programmed), however all cells within the block must have their voltage charges lowered if an erasure is needed. As a result, data may be erased needlessly, because deleting a single cell is impossible without changing the physical medium completely. Since the main constraint of encoding involves only increasing a cell's levels (i.e., cannot decrease), previous work has shown that using permutations of cells can allow data values to be rewritten.
Basic single cell level (SCL) flash memory uses two cell levels, each respectively representing either the on state or off state. Currently, multiple level cells (MLC) with four cell levels and triple level cell (TLC) with eight cell levels are also used. Current research is focused on three issues: error correction, interference, and increasing cell sum-rate. Increasing cell sum-rate is of particular interest; however, truly high cell sum-rates have not been achieved, and current state of the art codes use a high number of cells to achieve a particular sum-rate in relation to a specified number of writes.